home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 2000
/
MacHack 2000.toast
/
pc
/
The Hacks
/
Softshoe
/
Lisa's Mac Parts
/
Events
/
EventQueue.cp
next >
Wrap
Text File
|
2000-06-23
|
2KB
|
100 lines
// EventQueue.cp
#ifndef EventQueue_h
#include "EventQueue.h"
#endif
#ifndef Delayer_h
#include "Delayer.h"
#endif
#ifndef MouseWatcher_h
#include "MouseWatcher.h"
#endif
#ifndef RegionObject_h
#include "RegionObject.h"
#endif
#ifndef WindowObject_h
#include "WindowObject.h"
#endif
#ifndef Quitter_h
#include "Quitter.h"
#endif
EventQueue& EventQueue::The()
{
static EventQueue the;
return the;
}
EventQueue::EventQueue()
: eventCount( 0 )
{
FlushEvents( everyEvent, 0 );
}
void EventQueue::operator++()
{
DropInvalidEvents();
if ( eventCount > 0 )
{
for ( uint32 i = 1; i < eventCount; i++ )
events[i-1] = events[i];
--eventCount;
}
}
const EventRecord& EventQueue::Current()
{
if ( eventCount == 0 )
WaitNextEvent( everyEvent,
&events[ eventCount++ ],
Delayer::SleepTime(),
MouseWatcher::MouseSleepRegion() );
Assert( eventCount > 0 );
return events[0];
}
const EventRecord& EventQueue::Next()
{
Assert( eventCount > 0 );
DropInvalidEvents();
if ( eventCount == 1 )
WaitNextEvent( everyEvent,
&events[ eventCount++ ],
0,
0 );
Assert( eventCount > 1 );
return events[1];
}
bool EventQueue::Valid( const EventRecord& event )
{
switch( event.what )
{
case nullEvent:
return false;
case activateEvt:
case updateEvt:
return WindowObject::CheckedCast(
reinterpret_cast<void *>(event.message) ) != 0;
}
return true;
}
void EventQueue::DropInvalidEvents()
{
if ( eventCount > 1 && !Valid( events[1] ) )
--eventCount;
}
bool EventQueue::Unfinished() const
{
return eventCount > 0 || !Quitter::The().ApplicationCanExit();
}